iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

自我挑戰Ruby系列 第 27

Day 27 - 類別與實體2

  • 分享至 

  • xImage
  •  

實體方法

各種方法根據用於不同對象可以分為不同名稱的方法,

用於實體的即為實體方法,例如:

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

arance = Card.new
arance.rent_court "羽球場"
arance.use

betty = Card.new
betty.rent_court "壁球場"
betty.use

Card方法用於在arance變數上,

則arance為實體;

相同的Card方法用於在betty變數上,

則betty為實體,即Card為實體方法。

類別方法

定義self在實體方法上的方法,則成為類別方法。

例如:

class Card
  def self.all
    puts "運動中心會員"
  end
end

Card.all

Card.all就變成類別方法。

定義實體變數

之前提過實體變數就是以@符號開頭的變數,

但其實在設定上每次都樣這樣使用其實有點麻煩。

我們會藉由三種方式改善這件事:

#getter : attr_reader : name

getter的概念,例如:

def name
  @name
end

我們就會藉由attr_reader : name來作替代,

所以我們可以藉由這樣來替代以上寫法。

#setter : attr_writer : name

setter的概念,例如:

def name=(new_name) 
  @name = new_name
end

我們就會藉由attr_writer : name來作替代,

所以我們可以藉由這樣來替代以上寫法。

attr_accessor : name

當如果我們使用attr_reader : name和attr_writer : name,

例如:

attr_reader : name
attr_writer : name

我們可以藉由attr_accessor : name來做代替,

代替以上這兩行的寫法。

繼承

繼承的概念就像大家都共同擁有的概念,

例如之前敘述國民運動中心的會員,

像每一個區域都有國民運動中心,像新莊、三重、板橋…地區都有。

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

class Xinzhuang
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

class Sanchong
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

class Banqiao
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

但對我們而言,程式碼可能要重複的寫三次,

但不過我們可以藉由繼承的概念,將程式碼簡化:

class Card
  def rent_court(sport)
    puts "租#{sport}" 
  end

  def use
     puts "使用泳池"
  end
end

class Xinzhuang < Card
end

class Sanchong < Card
end

class Banqiao < Card
end

因為每個運動中心都有租借場地以及游泳的服務項目,

這樣我們藉由寫好一個,就可以通用在各個國民運動中心。


上一篇
Day 26 - 類別與實體1
下一篇
Day 28 - 特性
系列文
自我挑戰Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言